C 언어 포인터

IT 위키

C 언어 포인터(Pointer in C, 포인터)는 메모리의 주소를 저장하는 변수로, 변수나 함수, 배열 등의 위치를 가리킬 수 있는 기능을 제공한다.

1 개요[편집 | 원본 편집]

포인터는 C 언어의 핵심 개념 중 하나로, 메모리 관리, 동적 할당, 배열 및 함수 간 데이터 전달 등에 필수적으로 사용된다. 일반 변수는 값을 저장하지만, 포인터는 해당 값이 저장된 메모리의 주소를 저장한다.

2 선언과 초기화[편집 | 원본 편집]

포인터는 자료형 뒤에 `*`를 붙여 선언하며, `&` 연산자를 사용해 주소값을 대입한다.

  • 선언 형식: `자료형 *포인터이름;`
  • 예:
    • `int *p;` → 정수형을 가리키는 포인터 선언
    • `int a = 10;`
    • `p = &a;` → 변수 a의 주소를 포인터 p에 저장

3 간접 참조[편집 | 원본 편집]

포인터가 가리키는 주소에 접근하려면 `*` 연산자를 사용한다. 이를 간접 참조(dereferencing)라고 한다.

  • 예:
    • `*p = 20;` → p가 가리키는 변수의 값을 20으로 변경

4 포인터 연산[편집 | 원본 편집]

포인터는 정수값을 더하거나 뺄 수 있으며, 이는 해당 자료형의 크기 단위로 이동한다.

  • 예:
    • `p + 1` → 다음 요소(예: int형이면 +4바이트)를 가리킴

5 배열과 포인터[편집 | 원본 편집]

배열 이름은 해당 배열의 첫 번째 요소를 가리키는 포인터처럼 동작한다.

  • 예:
    • `int arr[3] = {1, 2, 3};`
    • `int *p = arr;`
    • `p[1]` 또는 `*(p + 1)` → 2

6 함수와 포인터[편집 | 원본 편집]

포인터는 함수 인자로 전달되어 원본 데이터를 변경할 수 있게 한다(주소 전달 방식).

  • 예:
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

7 동적 메모리 할당[편집 | 원본 편집]

포인터는 malloc, calloc, realloc 등을 사용하여 런타임 중에 메모리를 할당받는 데 사용된다.

  • 예:
int *p = (int *)malloc(sizeof(int) * 5);

8 예제[편집 | 원본 편집]

다음은 기본적인 포인터 사용 예제이다:

#include <stdio.h>

int main() {
    int a = 100;
    int *p = &a;

    printf("변수 a의 값: %d\n", a);
    printf("포인터 p가 가리키는 값: %d\n", *p);
    printf("변수 a의 주소: %p\n", &a);
    printf("포인터 p의 값: %p\n", p);

    return 0;
}

9 같이 보기[편집 | 원본 편집]

10 참고 문헌[편집 | 원본 편집]

  • Kernighan, Brian W., and Ritchie, Dennis M. *The C Programming Language*. Prentice Hall, 1988.
  • King, K. N. *C Programming: A Modern Approach*. W. W. Norton & Company, 2008.

11 각주[편집 | 원본 편집]